// 《围棋》作者版权所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package sys

type ArchFamilyType int

const (
	AMD64 ArchFamilyType = iota
	ARM
	ARM64
	I386
	MIPS
	MIPS64
	PPC64
	RISCV64
	S390X
	WASM
)

// PtrSize是指针的大小，以字节为单位-unsafe.Sizeof（uintpttr（0））但作为理想常量。
// 它也是机器的本机字大小（即32位系统为4，64位系统为8）。
const PtrSize = 4 << (^uintptr(0) >> 63)

// AIX需要更大的系统调用堆栈。
const StackGuardMultiplier = StackGuardMultiplierDefault*(1-GoosAix) + 2*GoosAix

// ArchFamily是体系结构族（AMD64，ARM，…）
const ArchFamily ArchFamilyType = _ArchFamily

// BigEndian报告体系结构是否为BigEndian。
const BigEndian = GoarchArmbe|GoarchArm64be|GoarchMips|GoarchMips64|GoarchPpc|GoarchPpc64|GoarchS390|GoarchS390x|GoarchSparc|GoarchSparc64 == 1

// DefaultPhysPageSize是默认的物理页面大小。
const DefaultPhysPageSize = _DefaultPhysPageSize

// PCQuantum是程序计数器的最小单位（x86上为1，大多数其他系统上为4）。
// 各种PC表记录PC增量，并用PCQuantum进行预分割。
const PCQuantum = _PCQuantum

// Int64Align是64位整数所需的对齐方式（32位系统为4，64位系统为8）。
const Int64Align = PtrSize

// MinFrameSize是帧底部系统保留字的大小
// 位于架构堆栈指针的正上方。
// 在x86上为零，在大多数非x86（基于LR）系统上为PtrSize。
// 在PowerPC上它更大，可以覆盖三个保留字：
// 编译器字、链接编辑器字和TOC保存字。
const MinFrameSize = _MinFrameSize

// StackAlign是SP寄存器所需的对齐方式。
// 堆栈必须至少与字对齐，但某些体系结构需要更多。
const StackAlign = _StackAlign
